const express = require('express');
const router = express.Router();
const noticeController = require('../../controllers/noticeController');
const { validateRequest } = require('../../middleware/validationMiddleware');
const { body, param, query } = require('express-validator');

// 创建通知公告
router.post('/notice',
    [
        body('title').notEmpty().withMessage('通知标题不能为空'),
        body('content').notEmpty().withMessage('通知内容不能为空'),
        body('type').isInt().withMessage('通知类型必须为整数'),
        body('level').notEmpty().withMessage('通知等级不能为空'),
        body('target_type').isIn([1, 2]).withMessage('目标类型只能为1或2'),
        body('target_user_ids').optional().isString().withMessage('目标用户ID列表必须为字符串')
    ],
    validateRequest,
    noticeController.createNotice
);

// 更新通知公告
router.put('/notice/:id',
    [
        param('id').isInt().withMessage('无效的通知ID'),
        body('title').optional().notEmpty().withMessage('通知标题不能为空'),
        body('content').optional().notEmpty().withMessage('通知内容不能为空'),
        body('type').optional().isInt().withMessage('通知类型必须为整数'),
        body('level').optional().notEmpty().withMessage('通知等级不能为空'),
        body('target_type').optional().isIn([1, 2]).withMessage('目标类型只能为1或2'),
        body('target_user_ids').optional().isString().withMessage('目标用户ID列表必须为字符串')
    ],
    validateRequest,
    noticeController.updateNotice
);

// 删除通知公告
router.delete('/notice/:id',
    [
        param('id').isInt().withMessage('无效的通知ID')
    ],
    validateRequest,
    noticeController.deleteNotice
);

// 获取通知公告详情
router.get('/notice/:id',
    [
        param('id').isInt().withMessage('无效的通知ID')
    ],
    validateRequest,
    noticeController.getNoticeById
);

// 获取通知公告列表
router.get('/notice/page',
    [
        query('pageNum').exists().withMessage('pageNum参数缺失')
            .isInt({ min: 1 }).withMessage('pageNum必须为大于0的整数'),
            query('pageSize').exists().withMessage('pageSize参数缺失')
            .isInt({ min: 1, max: 100 }).withMessage('pageSize必须为1-100之间的整数'),
            query('title').optional().isString(),
            query('type').optional().isInt().withMessage('通知类型必须为整数'),
            query('level').optional().isString(),
            query('publish_status').optional().isIn([-1, 0, 1]).withMessage('发布状态值只能为-1、0或1')
    ],
    validateRequest,
    noticeController.getNoticeList
);

// 发布通知公告
router.put('/notice/:id/publish',
    [
        param('id').isInt().withMessage('无效的通知ID')
    ],
    validateRequest,
    noticeController.publishNotice
);

// 撤回通知公告
router.put('/notice/:id/revoke',
    [
        param('id').isInt().withMessage('无效的通知ID')
    ],
    validateRequest,
    noticeController.revokeNotice
);

module.exports = router;